package com.kotlin

/**
 * 泛型
 * @author huan.fu
 * @date 2020-03-12 - 14:53
 */
// 泛型方法
fun <T> show(a : T) : T {
    return a
}

// 泛型约束
fun <T : Comparable<T>> maxOf(a : T , b : T) : T {
    return if (a > b) {
        a
    } else {
        b
    }
}

// 多个泛型参数约束
fun <T , R> max(a : T , b : T) : R where T : Comparable<T> , R : Number {
    return if (a > b) {
        a
    } else {
        b
    } as R
}

/**
 * 内联特化
 */
inline fun <reified T> 泛型内联特化方法(t : T) {
    val javaClazz = T::class.java
    println(javaClazz)
}

fun main() {
    println(maxOf(1 , 3))
    val a : Int = max(3 , 9)
    println(a)
}